home *** CD-ROM | disk | FTP | other *** search
/ EuroCD 3 / EuroCD 3.iso / Programming / Amos / AMOSP61Ext / source / AMOSPro_P61A.Lib.s < prev    next >
Text File  |  1998-06-24  |  7KB  |  350 lines

  1. * P61a Extension V1.1.
  2. * Written by Chris Hodges.
  3. * Last changes: Thu 24-Apr-97 23:06:13
  4.  
  5.     opt    c-,o+,w-
  6.  
  7. fade  = 1    ;0 = Normal, NO master volume control possible
  8.         ;1 = Use master volume (P61_Master)
  9.  
  10. jump = 1    ;0 = do NOT include position jump code (P61_SetPosition)
  11.         ;1 = Include
  12.  
  13. system = 1    ;0 = killer
  14.         ;1 = friendly
  15.  
  16. CIA = 1        ;0 = CIA disabled
  17.         ;1 = CIA enabled
  18.  
  19. exec = 1    ;0 = ExecBase destroyed
  20.         ;1 = ExecBase valid
  21.  
  22. lev6 = 1    ;0 = NonLev6
  23.         ;1 = Lev6 used
  24.  
  25. opt020 = 0    ;0 = MC680x0 code
  26.         ;1 = MC68020+ or better
  27.  
  28. channels = 4    ;amount of channels to be played
  29.  
  30. use = -1    ;The Usecode
  31.  
  32.  
  33. version    MACRO                        ;Version macro
  34.     dc.b    "1.1 24-Apr-97"
  35.     ENDM
  36.  
  37. debugvs    equ    0
  38.  
  39. ExtNb    equ    25-1                    ;Extension number 16
  40. NumLabl    equ    17                    ;Number of Labels
  41.  
  42. English    equ    $FACE                    ;Any symbol can be used
  43.                             ;but FACE is nicer :)
  44. Deutsch    equ    $AFFE                    ;Same for this
  45.  
  46. Languag    equ    English                    ;Choose the language
  47.  
  48.     IncDir    "dh1:Assembler/includes"        ;Set the includes
  49.     Include    "Player61.i"
  50.     Include    "AMOS/|AMOSPro_Includes.s"
  51.  
  52.     output    dh1:APSystem/AMOSPro_P61.Lib
  53.  
  54. debug    MACRO                        ;This is to debug
  55.     IFEQ    debugvs-1                ;if the switch is set to 1
  56.     illegal
  57.     ENDC
  58.     ENDM
  59. dload    MACRO                        ;Load the address
  60.     move.l    ExtAdr+ExtNb*16(a5),\1            ;of the data-space
  61.     ENDM
  62. L_Func    set    0
  63. AddLabl    MACRO                        ;Macro for adding
  64.     IFEQ    NARG-1                    ;functions
  65. \1    equ    L_Func                    ;One or non argument
  66.     ENDC
  67. L\<L_Func>:
  68. L_Func    set    L_Func+1
  69.     IFEQ    debugvs-2                ;If debug is 2 then
  70.     illegal                        ;fill in a illegal.
  71.     ENDC
  72.     ENDM
  73.  
  74. LC    set    0
  75. LS    MACRO                        ;Macro for the label-
  76. LC0    set    LC                    ;length part.
  77. LC    set    LC+1
  78.     dc.w    (L\<LC>-L\<LC0>)/2
  79.     ENDM
  80.  
  81. Start    dc.l    C_Tk-C_Off    ;First, a pointer to the token list
  82.     dc.l    C_Lib-C_Tk    ;Then, a pointer to the first library function
  83.     dc.l    C_Title-C_Lib    ;Then to the title
  84.     dc.l    C_End-C_Title    ;From title to the end of the program
  85.  
  86.     dc.w    0        ;A value of -1 forces the copy of the first library routine...
  87.  
  88.         rsreset                    ;Extension Main Datazone
  89. O_P61Base    rs.l    1
  90. O_MusicBank    rs.l    1
  91. O_MusicAddress    rs.l    1
  92. O_SamBuffer    rs.l    1
  93. O_MusicEnabled    rs.w    1
  94. O_MusicPaused    rs.w    1
  95. ;O_TempBuffer    rs.b    80
  96. ;O_FileInfo    rs.b    260
  97. O_SizeOf    rs.l    0
  98.  
  99. C_Off                            ;Automatic labellength
  100.                             ;generation.
  101.     REPT    NumLabl
  102.     LS
  103.     ENDR
  104.  
  105. C_Tk    dc.w     1,0
  106.     dc.b     $80,-1
  107.  
  108. ; Commands & Functions
  109. ;
  110. ; P61 Play bank[,pos]                    Implemented
  111. ; P61 Stop                        Implemented
  112. ; P61 Pause                        Implemented
  113. ; P61 Continue                        Implemented
  114. ; P61 Volume vol                    Implemented
  115. ; P61 Cia Speed ciabpm                    Implemented
  116. ; sig=P61 Signal                    Implemented
  117. ; P61 Fade speed [To vol]                Implemented
  118. ; pos=P61 Pos                        Implemented
  119. ;
  120. ; Now the real tokens...
  121.  
  122.     dc.w    L_P61Play1,-1
  123.     dc.b    "!p61 pla","y"+$80,"I0",-2
  124.     dc.w    L_P61Play2,-1
  125.     dc.b    $80,"I0,0",-1
  126.     dc.w    L_P61Stop,-1
  127.     dc.b    "p61 sto","p"+$80,"I",-1
  128.     dc.w    L_P61Pause,-1
  129.     dc.b    "p61 paus","e"+$80,"I",-1
  130.     dc.w    L_P61Continue,-1
  131.     dc.b    "p61 continu","e"+$80,"I",-1
  132.     dc.w    L_P61Volume,-1
  133.     dc.b    "p61 volum","e"+$80,"I0",-1
  134.     dc.w    L_P61CiaSpeed,-1
  135.     dc.b    "p61 cia spee","d"+$80,"I0",-1
  136.     dc.w    -1,L_P61Signal
  137.     dc.b    "p61 signa","l"+$80,"0",-1
  138.     dc.w    L_P61Fade1,-1
  139.     dc.b    "!p61 fad","e"+$80,"I0",-2
  140.     dc.w    L_P61Fade2,-1
  141.     dc.b    $80,"I0t0",-1
  142.     dc.w    -1,L_P61Pos
  143.     dc.b    "p61 po","s"+$80,"0",-1
  144.     dc.w     0
  145.  
  146. C_Lib    include    "InitRou.lnk"                ;Initroutines
  147.  
  148.     AddLabl    L_P61Play1                ;P61a Play bank
  149.     clr.l    -(a3)
  150.     Rbra    L_P61Play2
  151.  
  152.     AddLabl    L_P61Play2                ;P61a Play bank,pos
  153.     Rbsr    L_P61Stop
  154.     dload    a2
  155.     move.l    (a3)+,d6
  156.     move.l    (a3)+,d0
  157.     move.l    d0,O_MusicBank(a2)
  158.     Rjsr    L_Bnk.OrAdr
  159.     move.l    d0,a0
  160.     move.l    a0,O_MusicAddress(a2)
  161.     cmp.l    #"P61A",(a0)+
  162.     beq.b    .modok
  163.     subq.l    #4,a0
  164. .modok    btst    #6,3(a0)
  165.     beq.s    .nobuf
  166.     move.l    4(a0),d0
  167.     move.l    #$10003,d1
  168.     move.l    a6,-(sp)
  169.     move.l    4.w,a6
  170.     jsr    _LVOAllocVec(a6)
  171.     move.l    (sp)+,a6
  172.     move.l    d0,O_SamBuffer(a2)
  173.     bne.s    .nobuf
  174.     moveq.l    #0,d0
  175.     Rbra    L_Custom
  176. .nobuf    move.l    O_P61Base(a2),a0
  177.     moveq.l    #64,d0
  178.     move.w    d0,P61_Master-P61_motuuli(a0)
  179.     move.w    d0,P61_FadeTo-P61_motuuli(a0)
  180.     clr.w    P61_Pos-P61_motuuli(a0)
  181.     clr.w    P61_Patt-P61_motuuli(a0)
  182.     clr.w    P61_CRow-P61_motuuli(a0)
  183.     move.w    #125,P61_Tempo-P61_motuuli(a0)
  184.     move.w    #-1,P61_E8-P61_motuuli(a0)
  185.     moveq.l    #0,d0
  186.     move.l    O_MusicAddress(a2),a0
  187.     sub.l    a1,a1
  188.     move.l    O_SamBuffer(a2),a2
  189.     moveq.l    #1,d1
  190.     Rbsr    L_P61Func
  191.     tst.l    d0
  192.     beq.s    .noerr
  193.     moveq.l    #1,d0
  194.     Rbra    L_Custom
  195. .noerr    dload    a2
  196.     tst.l    d6
  197.     ble.s    .nopos
  198.     move.l    d6,d0
  199.     moveq.l    #3,d1
  200.     Rbsr    L_P61Func
  201. .nopos    move.w    #1,O_MusicEnabled(a2)
  202. ;    clr.w    O_MusicPaused(a2)
  203.     rts
  204.  
  205.     AddLabl    L_P61Stop                ;P61a Stop
  206.     dload    a2
  207.     tst.w    O_MusicEnabled(a2)
  208.     beq.s    .nooff
  209.     moveq.l    #2,d1
  210.     Rbsr    L_P61Func
  211. .nooff    move.l    O_SamBuffer(a2),d0
  212.     beq.s    .skip
  213.     move.l    d0,a1
  214.     clr.l    O_SamBuffer(a2)
  215.     move.l    a6,-(sp)
  216.     move.l    4.w,a6
  217.     jsr    _LVOFreeVec(a6)
  218.     move.l    (sp)+,a6
  219. .skip    rts
  220.  
  221.     AddLabl    L_P61Pause                ;P61a Pause
  222.     dload    a2
  223.     tst.l    O_MusicPaused(a2)
  224.     bne.s    .skip
  225.     move.l    O_P61Base(a2),a0
  226.     clr.w    P61_Play-P61_motuuli(a0)
  227.     move.w    #1,O_MusicPaused(a2)
  228.     lea    $DFF000,a0
  229.     moveq    #0,d0
  230.     move    d0,$a8(a0)
  231.     move    d0,$b8(a0)
  232.     move    d0,$c8(a0)
  233.     move    d0,$d8(a0)
  234.     move    #$f,$96(a0)
  235. .skip    rts
  236.  
  237.     AddLabl    L_P61Continue                ;P61a Continue
  238.     dload    a2
  239.     move.l    O_P61Base(a2),a0
  240.     move.w    #1,P61_Play-P61_motuuli(a0)
  241.     clr.w    O_MusicPaused(a2)
  242.     rts
  243.  
  244.     AddLabl    L_P61Volume                ;P61a Volume vol
  245.     dload    a2
  246.     move.l    (a3)+,d0
  247.     bpl.s    .nozero
  248.     moveq.l    #0,d0
  249. .nozero    cmp.w    #64,d0
  250.     blt.s    .no64
  251.     moveq.l    #64,d0
  252. .no64    move.l    O_P61Base(a2),a0
  253.     move.w    d0,P61_Master-P61_motuuli(a0)
  254.     move.w    d0,P61_FadeTo-P61_motuuli(a0)
  255.     rts
  256.  
  257.     AddLabl    L_P61CiaSpeed                ;P61a Cia Speed bpm
  258.     dload    a2
  259.     move.l    (a3)+,d0
  260.     cmp.w    #32,d0
  261.     bgt.s    .no32
  262.     moveq.l    #32,d0
  263. .no32    cmp.w    #255,d0
  264.     blt.s    .no255
  265.     move.w    #255,d0
  266. .no255    move.l    O_P61Base(a2),a0
  267.     move.l    P61_timer-P61_motuuli(a0),d1
  268.     divu    d0,d1
  269.     move    d1,P61_thi2-P61_motuuli(a0)
  270.     sub    #$1f0*2,d1
  271.     move    d1,P61_thi-P61_motuuli(a0)
  272.     rts
  273.  
  274.     AddLabl    L_P61Signal                ;sig=P61a Signal
  275.     moveq.l    #0,d2
  276.     dload    a2
  277.     move.l    O_P61Base(a2),a0
  278.     lea    P61_E8-P61_motuuli(a0),a0
  279.     move.w    (a0),d3
  280.     ext.l    d3
  281.     move.w    #-1,(a0)
  282.     rts
  283.  
  284.     AddLabl    L_P61Fade1
  285.     clr.l    -(a3)
  286.     Rbra    L_P61Fade2
  287.  
  288.     AddLabl    L_P61Fade2                ;P61 Fade speed To vol
  289.     dload    a2
  290.     move.l    O_P61Base(a2),a0
  291.     move.l    (a3)+,d0
  292.     move.w    d0,P61_FadeTo-P61_motuuli(a0)
  293.     move.l    (a3)+,d0
  294.     Rblt    L_IFonc
  295.     move.w    d0,P61_FadeSpeed-P61_motuuli(a0)
  296.     move.w    d0,P61_FadeCount-P61_motuuli(a0)
  297.     rts
  298.  
  299.     AddLabl    L_P61Pos                ;pos=P61 Pos
  300.     moveq.l    #0,d2
  301.     dload    a2
  302.     move.l    O_P61Base(a2),a0
  303.     move.w    P61_Pos-P61_motuuli(a0),d3
  304.     ext.l    d3
  305.     rts
  306.  
  307.     AddLabl    L_P61Func
  308.     movem.l    a2-a6/d2-d7,-(sp)
  309.     lea    $DFF000,a6
  310.     bsr.s    .func
  311.     movem.l    (sp)+,a2-a6/d2-d7
  312.     rts
  313. .func    subq.w    #1,d1
  314.     bmi.s    .initp                    ;0
  315.     subq.w    #1,d1
  316.     bmi.s    P61_Init                ;1
  317.     subq.w    #1,d1
  318.     bmi    P61_End                    ;2
  319.     subq.w    #1,d1
  320.     bmi    P61_SetPosition                ;3
  321.     rts
  322. .initp    lea    P61_motuuli(pc),a0
  323.     dload    a2
  324.     move.l    a0,O_P61Base(a2)
  325.     rts
  326.  
  327.     RDATA
  328.     include    "610.2_devpac3.asm"
  329.  
  330.     include    "Error.lnk"
  331.  
  332.     AddLabl    L_TheEnd                ;Last label.
  333.  
  334.     IFNE    (L_TheEnd-NumLabl)            ;Checks, if labels
  335. ;    PRINTT    "Incorrect amount of Labels: "        ;are missing.
  336. ;    PRINTT    "Expected:"
  337. ;    PRINTT    _NumLabl
  338. ;    PRINTT    "Real:"
  339. ;    PRINTT    _L_TheEnd
  340.     FAIL
  341.     ENDC
  342.  
  343. C_Title    dc.b    "AMOSPro P61 extension V "
  344.     version
  345.     dc.b    0,"$VER: V"
  346.     version
  347.     dc.b    0
  348.     even
  349. C_End    dc.w    0
  350.